package com.demo.java.OD151_200.OD154;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【投篮大赛】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145754513
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();  // 读取输入
        String[] elements = input.split(" ");  // 按空格分割字符串

        List<Integer> scores = new ArrayList<>();  // 用于存储数字和操作的结果

        // 处理每一个输入的元素
        if (!processScores(elements, scores)) {
            System.out.println(-1);  // 如果遇到非法操作，输出-1
            return;
        }

        // 计算所有得分的总和
        int totalScore = calculateTotalScore(scores);
        System.out.println(totalScore);  // 输出总得分
    }

    // 处理输入的所有元素
    private static boolean processScores(String[] elements, List<Integer> scores) {
        for (String element : elements) {
            if (!handleElement(element, scores)) {
                return false;  // 如果某个操作失败，返回false
            }
        }
        return true;
    }

    // 根据元素的类型处理不同的操作
    private static boolean handleElement(String element, List<Integer> scores) {
        switch (element) {
            case "+":  // 处理加法操作
                return handlePlus(scores);
            case "D":  // 处理双倍操作
                return handleDouble(scores);
            case "C":  // 处理移除操作
                return handleRemove(scores);
            default:  // 处理数字操作
                scores.add(Integer.parseInt(element));
                return true;
        }
    }

    // 处理加法操作
    private static boolean handlePlus(List<Integer> scores) {
        if (scores.size() < 2) {
            return false;  // 如果列表中少于两个元素，返回失败
        }
        int sum = scores.get(scores.size() - 1) + scores.get(scores.size() - 2);
        scores.add(sum);  // 将最后两个数的和加入列表
        return true;
    }

    // 处理双倍操作
    private static boolean handleDouble(List<Integer> scores) {
        if (scores.isEmpty()) {
            return false;  // 如果列表为空，返回失败
        }
        int doubleScore = scores.get(scores.size() - 1) * 2;
        scores.add(doubleScore);  // 将最后一个数的双倍加入列表
        return true;
    }

    // 处理移除操作
    private static boolean handleRemove(List<Integer> scores) {
        if (scores.isEmpty()) {
            return false;  // 如果列表为空，返回失败
        }
        scores.remove(scores.size() - 1);  // 移除最后一个数
        return true;
    }

    // 计算所有得分的总和
    private static int calculateTotalScore(List<Integer> scores) {
        int totalScore = 0;
        for (int score : scores) {
            totalScore += score;  // 累加每个得分
        }
        return totalScore;
    }
}